package com.leyou.controller;

import com.leyou.common.enums.ExceptionEnum;
import com.leyou.common.exception.LyException;
import com.leyou.common.utils.BeanHelper;
import com.leyou.item.dto.CategoryDTO;

import com.leyou.item.entity.Category;
import com.leyou.item.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

/*
@RestController注解，相当于@Controller+@ResponseBody两个注解的结合，返回json数据不需要在方法前面
加@ResponseBody注解了，但使用@RestController这个注解，就不能返回jsp,html页面，视图解析器无法
解析jsp,html页面
理解下面的注解哦。
@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中，一般在异步获取数据时使用【也就是AJAX】，
在使用 @RequestMapping后，返回值通常解析为跳转路径，但是加上 @ResponseBody 后返回结果不会被解析为
跳转路径，而是直接写入 HTTP response body 中。 比如异步获取 json 数据，加上 @ResponseBody 后，
会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中，使用适合的 HttpMessageConverter
将请求体写入某个对象。

* */

@RestController
@RequestMapping("/category")//分类
public class CategoryController {
    @Autowired
    private CategoryService categoryService;
    /**
     * 根据父id 获取分类集合
     * @param pid
     * @return
     * 请求：     of/parent?pid=*;
     */
    @GetMapping("/of/parent")
    public ResponseEntity<List<CategoryDTO>> findByParentId(@RequestParam(name = "pid") Long pid){

        List<CategoryDTO> categoryDTOS = categoryService.findCategoryListByParentId(pid);

        return ResponseEntity.ok(categoryDTOS);
    }
    /*
    * 查找分类通过品牌ID
    * */
    @GetMapping("/of/brand")
    public ResponseEntity<List<CategoryDTO>> findById(@RequestParam(name = "id") Long id){
        return ResponseEntity.ok(categoryService.findCategoryListByBandId(id));
    }
    /**
     * 根据id的集合查询商品分类
     * @param ids 商品分类的id集合
     * @return 分类集合    findCategoryByIds    与接口名字不一样也没事
     */
    @GetMapping("/names")
    public ResponseEntity<List<CategoryDTO>> findById(@RequestParam(name = "ids") List<Long> ids){
        Collection<Category> categoryCollection = categoryService.listByIds(ids);
        if(CollectionUtils.isEmpty(categoryCollection)){
            throw new LyException(ExceptionEnum.CATEGORY_NOT_FOUND);
        }
        List<CategoryDTO> categoryDTOList = categoryCollection.stream().map(categroy -> {
            return BeanHelper.copyProperties(categroy, CategoryDTO.class);
        }).collect(Collectors.toList());

        return ResponseEntity.ok(categoryDTOList);
    }
    /*
     * 查找面包屑通过分类ID
     * */
    @GetMapping("/levels")
    public ResponseEntity<List<CategoryDTO>> findParmById(@RequestParam(name = "id") Long id){
        return ResponseEntity.ok(categoryService.findCategoryByCid3(id));
    }

}
